As mobile computing devices operate to provide increasing levels of computation and communication, energy efficiency concerns increase as well, especially when the devices are battery-operated. In ad hoc networks, where multiple nodes are tasked with forwarding data packets from their neighbors, it is useful to reduce energy consumption along the route, and to balance individual device energy levels. This is because unbalanced energy usage can result in early node failure (e.g., when nodes become overloaded), which in turn may lead to network partitioning and reduced network lifetime. In addition, when a node along the route fails during the routing process, data transmission is typically re-started from the source node, causing congestion in the network and increasing the complexity of the routing algorithm.